﻿$(function () {
    $.extend($.fn.validatebox.defaults.rules, {
        tel: {
            validator: function (value) {
                //带区号的固定电话
                var regTel1 = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/.test(value);
                //不带区号的固定电话
                var regTel2 = /^(\d{7,8})(-(\d{3,}))?$/.test(value);

                return regTel1 || regTel2;
            },
            message: common.telValidateMessage,
        },

        mobile: {
            validator: function (value) {
                return /^1[3|5|7|8][0-9]\d{8}$/.test(value);
            },
            message: common.mobileValidateMessage,
        },

        idCard: {
            validator: function (value) {
                return checkIdcard(value);
            },
            message: common.idCardValidateMessage,
        },

        qq: {
            validator: function (value) {
                return /^\s*[.0-9]{5,11}\s*$/.test(value);
            },
            message: common.qqValidateMessage,
        },

        zip: {
            validator: function (value) {
            	return /^\s*[1-9]\d{5}$/.test(value);
            },
            message: common.zipValidateMessage,
        },	

        publicationInformation: {
            validator: function (value) {
                //return /^\S*^\d{1,2}\.{1}\d{2}[A-Za-z0-9]+$/.test(value);
            	return /^[0-9]{1,2}\.[0-9]{2,99}$/.test(value);
            },
            message: common.publicationInformationValidateMessage,
        },

        word: {
            validator: function (value) {
                var extension = value.substr((value.lastIndexOf('.') + 1));
                return (extension == 'doc' || extension == 'docx');
            },
            message: common.wordValidateMessage,
        },

        pdf: {
            validator: function (value) {
                var extension = value.substr((value.lastIndexOf('.') + 1));
                return (extension == 'pdf');
            },
            message: common.pdfValidateMessage,
        },

        excel: {
            validator: function (value) {
                var extension = value.substr((value.lastIndexOf('.') + 1));
                return (extension == 'xls' || extension == 'xlsx');
            },
            message: common.excelValidateMessage,
        },

        cc: {
            validator: function (value) {
                var regEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
                var ccArray = value.split(';')
                for (var i = 0; i < ccArray.length; i++) {
                    if (ccArray[i]) {
                        if (regEmail.test(ccArray[i])) {
                            continue
                        }
                        return false;
                    }
                }
                return true;
            },
            message: "含有无效邮箱！",
        },
    });

    function checkIdcard(idcard) {
        var Errors = new Array(
            "身份证号码位数不对！",
            "身份证号码出生日期超出范围或含有非法字符！",
            "身份证号码校验错误！",
            "身份证地区非法！"
        );
        var errorMessage = "";

        var area = {
            11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古",
            21: "辽宁", 22: "吉林", 23: "黑龙江",
            31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东",
            41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南",
            50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏",
            61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆",
            71: "台湾",
            81: "香港", 82: "澳门",
            91: "国外"
        };
        var Y, JYM;
        var S, M;
        var idcard_array = new Array();

        idcard_array = idcard.split("");
        if (area[parseInt(idcard.substr(0, 2))] == null) {
            errorMessage = Errors[3];
            return false;
        }

        switch (idcard.length) {
            case 15:
                if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0
                    || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0
                    && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) {

                    ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;
                }
                else {
                    ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;
                }

                if (ereg.test(idcard)) {
                    return true;
                }
                else {
                    errorMessage = Errors[1];
                    return false;
                }

                break;

            case 18:

                if (parseInt(idcard.substr(6, 4)) % 4 == 0
                    || (parseInt(idcard.substr(6, 4)) % 100 == 0
                    && parseInt(idcard.substr(6, 4)) % 4 == 0)) {
                    //闰年出生日期的合法性正则表达式
                    ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;
                } else {
                    //平年出生日期的合法性正则表达式
                    ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;
                }

                if (ereg.test(idcard)) {
                    S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
                        + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
                        + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
                        + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
                        + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
                        + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
                        + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
                        + parseInt(idcard_array[7]) * 1
                        + parseInt(idcard_array[8]) * 6
                        + parseInt(idcard_array[9]) * 3;
                    Y = S % 11;
                    M = "F";
                    JYM = "10X98765432";
                    M = JYM.substr(Y, 1);
                    if (M == idcard_array[17]) {
                        return true
                    }
                    else {
                        errorMessage = Errors[2];
                        return false;
                    }

                }
                else {
                    errorMessage = Errors[1];
                    return false;
                }

                break;

            default:
                errorMessage = Errors[0];
                return false;

                break;
        }
    }
});

